"""
语法
    iframe:实现web嵌套的标签，在一个web页面中显示另一个web页面

    2.1 确定操作的元素在iframe标签中
        在F12开发者工具的最下方，检查需要定位的元素前，是否有iframe标签
        如果确定定位元素的方法和属性都没有错误，但代码提示NoSuchElement，考虑元素是否在iframe中
    2.2 进入iframe
        driver.switch_to.frame(参数)
        参数：
            1. 当iframe标签有固定的id/name属性时，参数=id/name的属性值
            2. 当知道网页中iframe标签的个数时，可以使用索引，索引从0开始
            3. 对iframe标签进行元素定位，通过元素定位进入
    2.3 退出iframe
         driver.switch_to.default_content()  # 退出所有iframe
         driver.switch_to.parent_frame()  # 退出当前iframe
3. 注意事项
    1. 进入iframe时，只能一层一层进入
    2. 退出iframe时，选择的方法，取决于后续的业务
"""

# 1. 导入需要的包
import os
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

# 2. 创建浏览器驱动, 并打开浏览器
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(os.path.abspath("../练习页面/注册实例.html"))

# 3 元素定位+元素操作
# 3.1 通个ifranme标签固定的id/name属性值, 进入对应的iframe
driver.switch_to.frame("idframe1")  # 通过iframe的id属性值进入
driver.switch_to.frame("myframe1")  # 通过iframe的name属性值进入

# 3.2 通过iframe标签的索引进入
# driver.switch_to.frame(0)

# 3.3 通过对iframe标签进行元素定位进入
iframe_tag = driver.find_element(By.ID, "idframe1")
driver.switch_to.frame(iframe_tag)

# 定位注册A页面中的输入框
driver.find_element(By.ID, "userA").send_keys("jerry")

# 3.4 退出iframe
# driver.switch_to.default_content()  # 退出所有iframe
driver.switch_to.parent_frame()  # 退出当前iframe

# 3.5 进入另一个iframe注册B
sleep(2)
driver.switch_to.frame(1)
driver.find_element(By.ID, "userB").send_keys("tom")

# 4. 关闭浏览器
sleep(3)
driver.quit()